﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Sige
{
    class Docente : Persona
    {
        private string legajo;
        private DateTime fechaDeAltaDoc;
        private DateTime fechaDeBajaDoc;
        private bool estadoDoc;

        public string Legajo
        {
            get { return legajo; }
            set { legajo = value; }
        }

        public DateTime FechaDeAltaDoc
        {
            get { return fechaDeAltaDoc; }
            set { fechaDeAltaDoc = value; }
        }

        public DateTime FechaDeBaja
        {
            get { return fechaDeBajaDoc; }
            set { fechaDeBajaDoc = value; }
        }

        public bool EstadoDoc
        {
            get { return estadoDoc; }
            set { estadoDoc = value; }
        }

        public bool Docente_Activo_Existente(string legajo)
        {
            bool existe = false;
            string consulta = "Select * from profesores where (legajo = '" + legajo + "') and (estado = 1)";
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = datos.ObtenerConexion(datos.getruta());
            SqlCommand cmd = new SqlCommand(consulta, cn);
            SqlDataReader dr;
            try
            {
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    existe = true;
                }
            }
            catch
            {
                existe = false;
            }
            finally
            {
                cn.Close();
            }
            return existe;
        }

        public bool Docente_Existente(string legajo)
        {
            bool existe = false;
            string consulta = "Select * from profesores where legajo = '" +
                legajo + "'";
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = datos.ObtenerConexion(datos.getruta());
            SqlCommand cmd = new SqlCommand(consulta, cn);
            SqlDataReader dr;
            try
            {
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    existe = true;
                }
            }
            catch
            {
                existe = false;
            }
            finally
            {
                cn.Close();
            }
            return existe;
        }

        public bool Insertar()
        {
            
            bool insert = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "INSERT profesores (legajo, tipodocumento,documento,fechaalta,fechabaja,estado) values (@legajo,@tipodocumento, @documento, @fechaalta, @fechabaja,@estado)";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@legajo", this.Legajo);
            cmd.Parameters.AddWithValue("@tipodocumento", this.TipoDocumento);
            cmd.Parameters.AddWithValue("@documento", this.Documento);
            cmd.Parameters.AddWithValue("@fechaalta", this.FechaDeAltaDoc);
            cmd.Parameters.AddWithValue("@fechabaja", this.FechaDeBaja);
            cmd.Parameters.AddWithValue("@estado", this.EstadoDoc);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (SqlException exc)
            {
                insert = false;
                }
            finally
            {
                cn.Close();
            }
            return insert;
        }

        public bool Activar()
        {
            bool activar = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "UPDATE profesores SET estado = 1 WHERE legajo = @legajo";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@legajo", this.Legajo);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch(SqlException)
            {
                activar = false;
            }
            finally
            {
                cn.Close();
            }
            return activar;
        }

        public void ObtenerTablaDocentePorLegajo(ref DataTable d, string leg)
        {
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection();
            SqlDataAdapter adapt = new SqlDataAdapter();
            cn = datos.ObtenerConexion(datos.getruta());
            adapt = datos.ObtenerAdaptador("Select * from profesores where legajo = '" + leg + "'", cn);
            adapt.Fill(d);
        }

        public void ObtenerDocenteDesdeDatatable(ref Docente d, DataTable dt)
        {
            d.Legajo = dt.Rows[0][0].ToString();
            d.TipoDocumento = dt.Rows[0][1].ToString();
            d.Documento = dt.Rows[0][2].ToString();
            d.FechaDeAltaDoc = Convert.ToDateTime(dt.Rows[0][3]);
            try
            {
                d.FechaDeBaja = Convert.ToDateTime(dt.Rows[0][4]);
            }
            catch
            {
                d.FechaDeBaja = Convert.ToDateTime("01/01/1753");
            }            
            d.EstadoDoc = Convert.ToBoolean(dt.Rows[0][5]);
        }

        public bool Desactivar()
        {
            bool desactivar = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "UPDATE profesores SET estado = 0 WHERE legajo = @legajo";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@legajo", this.Legajo);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch
            {
                desactivar = false;
            }
            finally
            {
                cn.Close();
            }
            return desactivar;
        }

        public bool ModificarFechaBaja(string legajo,DateTime fechabaja)
        {
            bool modif = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "UPDATE profesores SET fechabaja = @fechabaja WHERE legajo = @legajo";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@legajo", legajo);
            cmd.Parameters.AddWithValue("@fechabaja", fechabaja);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch(SqlException exc)
            {
                modif = false;
            }
            finally
            {
                cn.Close();
            }
            return modif;
        }
        

    }//CIERRE CLASE DOCENTE
}//CIERRE NAMESPACE
